#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "BSNodeCocos2dx.h"

using namespace cocos2d;
using namespace CocosDenshion;
static const float SPEED = 200; // pix / sec
CCScene* HelloWorld::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();
    
    // 'layer' is an autorelease object
    HelloWorld *layer = HelloWorld::create();
    
    // add layer as a child to scene
    scene->addChild(layer);
    
    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }
    this->setTouchEnabled(true);
    
    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.
    
    // add a "close" icon to exit the progress. it's an autorelease object
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                                          "CloseNormal.png",
                                                          "CloseSelected.png",
                                                          this,
                                                          menu_selector(HelloWorld::menuCloseCallback) );
    pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
    
    // create menu, it's an autorelease object
    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
    pMenu->setPosition( CCPointZero );
    this->addChild(pMenu, 1);
    
    /////////////////////////////
    // 3. add your codes below...
    
    // add a label shows "Hello World"
    // create and initialize a label
    CCLabelTTF* pLabel = CCLabelTTF::create("touch to atk", "Thonburi", 34);
    
    // ask director the window size
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    // position the label on the center of the screen
    pLabel->setPosition( ccp(size.width / 2, size.height - 20) );
    
    // add the label as a child to this layer
    this->addChild(pLabel, 1);
    
    // add "HelloWorld" splash screen"
    CCSprite* pSprite = CCSprite::create("HelloWorld.png");
    
    // position the sprite on the center of the screen
    pSprite->setPosition( ccp(size.width/2, size.height/2) );
    
    // add the sprite as a child to this layer
    this->addChild(pSprite, 0);
    
    
    
    node = BSNodeCocos2dx::create();
    node->setScale(0.5);
    this->addChild(node);
    node->setRece("elf");
    node->setHat("helmet");
    node->setWeapon("axe");
    
    node->setSpriterData("man_animation1");
    walk(node);
    node->setPosition(ccp(160, 0));
    
    
    node1 = BSNodeCocos2dx::create();
    node1->setScale(0.5);
    this->addChild(node1);
    node1->setSpriterData("man_animation1");
    idle(node1);
    node1->setScaleX(-0.5);
    node1->setPosition(250, 0);
    
    
    return true;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    CCDirector::sharedDirector()->end();
    
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}
void HelloWorld::idle(BSNodeCocos2dx* n)
{
    n->playAnimation("idel", true, NULL);
}

void HelloWorld::walk(BSNodeCocos2dx* n)
{
    n->playAnimation("walk", true, NULL);
}
void HelloWorld::atk(BSNodeCocos2dx *n)
{
    n->playAnimation("atk", true, NULL);
}
void HelloWorld::beAtk(BSNodeCocos2dx *n)
{
    CCCallFuncND* fun = CCCallFuncND::create(this, callfuncND_selector(HelloWorld::idle), n);
    n->playAnimation("be_atk", false, fun);
}
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event) {
    
    //    CCCallFuncND* fun = CCCallFuncND::create(this, callfuncND_selector(HelloWorld::idle), node);
    //    node->playAnimation("atk", false, fun);
    //
    //    CCCallFuncND* fun1 = CCCallFuncND::create(this, callfuncND_selector(HelloWorld::beAtk), node1);
    //    CCSequence* seq = CCSequence::createWithTwoActions(CCDelayTime::create(0.3), fun1);
    //    node1->runAction(seq);
    
    
    
    cocos2d::CCTouch *touch = dynamic_cast<CCTouch*>(touches->anyObject());
    
    CCPoint touchP = touch->getLocation();
    CCPoint roloP = node->getPosition();
    
    if (roloP.x > touchP.x)
        node->setScaleX(-fabsf(node->getScaleX()));
    else
        node->setScaleX(fabsf(node->getScaleX()));
    
    node1->stopAction(move);
    
    float d = sqrt(pow(touchP.x - roloP.x, 2 ) + pow(touchP.y - roloP.y,2));
    move = CCMoveTo::create( d / SPEED, touch->getLocation());
    node->runAction(move);
    
    walk(node);
    CCCallFuncND* fun1 = CCCallFuncND::create(this, callfuncND_selector(HelloWorld::atk), node);
    CCSequence* seq = CCSequence::createWithTwoActions(CCDelayTime::create(d / SPEED), fun1);
    node->runAction(seq);
}
void HelloWorld::ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event){
    
}
void HelloWorld::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
{
    
}
